跳到主要内容

第 4 章 容器与 Kubernetes 入门

概述和学习目标

本章讨论容器和Kubernetes的基本概念,包括它们的体系结构和关键组件。我们了解虚拟机和容器之间的区别,并回顾虚拟机的缺点。我们将使用容器部署一个简单的应用程序,并使用Kubernetes对其进行编排。

在本章结束时,您应该能够:

  • 回顾容器和虚拟机之间的区别
  • 讨论集装箱化和Kubernetes的好处和能力
  • 解释对Kubernetes等容器编排工具的需求

什么是集容器?

容器彻底改变了应用程序的打包和部署。在当今快节奏的世界中,快速有效地部署软件应用程序的能力对于各种规模的企业都至关重要。容器已经成为一种革命性的技术,它通过为应用程序运行提供轻量级,便携式和隔离的环境来满足这一需求。

把一个容器想象成一个标准化的盒子,它可以容纳你的应用程序需要运行的所有东西 -- 它的代码、库、运行时环境和系统配置。与虚拟机虚拟化整个硬件堆栈不同,容器与其他容器共享底层操作系统 (OS),从而使它们更加轻巧和高效。

容器和虚拟机的区别

容器和虚拟机 (vm) 都在虚拟化领域中使用,但是它们具有不同的用途并具有独特的优势。通过了解容器和vm之间的差异,您可以确定哪种技术最适合您的特定需求。

虚拟机: 隔离和多功能

虚拟机提供完全隔离的虚拟环境,并具有操作系统和所有必要的依赖项。每个VM都在管理程序上运行,该管理程序是抽象物理硬件并允许多个VM在单个物理计算机上共存的层。以下是虚拟机的一些关键特征:

  • 强隔离每个VM都作为一个独立的实体运行,具有自己的专用资源和一个单独的OS实例。这种隔离使虚拟机高度安全,因为一个虚拟机中的漏洞不会影响其他虚拟机。
  • 兼容性虚拟机可以在同一硬件内运行不同的操作系统。这使得虚拟机具有通用性,并允许并行运行遗留应用程序或不同的操作系统版本。
  • 完全抽象虚拟机完全抽象底层硬件,提供硬件级虚拟化。这意味着虚拟机的运行就像它们在专用物理机器上运行一样,使它们能够完全控制虚拟环境。
  • 资源开销与容器相比,虚拟机消耗更多的资源,因为每个虚拟机需要一个单独的OS实例。与容器相比,这可能导致更高的基础设施成本和更慢的启动时间。

容器: 轻巧高效

容器提供了一种打包和运行具有其依赖关系的应用程序的方法,这些依赖关系与底层主机系统隔离。容器背后的核心思想是为传统vm提供轻巧高效的替代方案。以下是容器的一些关键特征:

  • 资源效率容器共享主机系统的操作系统 (OS) 内核,无需多个OS实例。这减少了开销并释放了资源,与vm相比,使容器的资源效率大大提高。
  • 快速启动和可扩展性容器几乎可以瞬间启动和停止,通常在几秒钟内。这种快速的启动时间使它们具有高度可伸缩性,并允许水平缩放,这意味着您可以轻松启动应用程序的多个实例来处理增加的工作负载。
  • 隔离和安全容器彼此隔离,并且与主机系统隔离,从而提供了强大的资源隔离。但是,由于它们共享OS内核,因此内核中的漏洞可能会影响主机上运行的所有容器。
  • 易于管理容器由于其轻量级的特性而更易于管理。它们可以毫不费力地部署、更新和回滚,使其非常适合需要频繁更新和持续集成/持续部署 (CI/CD) 工作流程的应用程序。

选择哪一个?

容器和虚拟机之间的选择取决于您的特定用例和要求。以下是一些可能更合适的方案:

  • 开发和测试由于容器的敏捷性和易于管理,因此广泛用于开发和测试环境。它们允许开发人员创建可复制的环境并简化部署。
  • 微服务架构容器很适合基于微服务的体系结构,在这些体系结构中,应用程序被分解为小型的独立服务。容器的轻量级特性使单个服务的扩展和部署变得容易。
  • 遗留应用程序虚拟机对于运行可能与现代容器环境不兼容的遗留应用程序是优选的。虚拟机允许维护现有基础架构和运行应用程序,而无需进行重大修改。
  • 隔离要求高在严格隔离和安全性至关重要的场景中,与容器相比,虚拟机提供了更强大的保证。数据隐私至关重要的金融和医疗保健等行业通常会选择虚拟机。

容器和虚拟机提供不同级别的隔离,资源效率和多功能性。容器擅长提供轻量级,可扩展且易于管理的环境,而虚拟机则提供了与不同操作系统的强大隔离和兼容性。通过了解两者之间的差异,您可以在根据需要选择正确的虚拟化技术时做出明智的决定。

集装箱简史

容器技术有着令人着迷的历史,其特点是创新改变了应用程序的开发,部署和管理方式。以下是一个简要概述:

  • Chroot
    隔离的概念可以追溯到Unix操作系统中的chroot系统调用,该调用是在20世纪70年代中引入的。Chroot允许进程拥有自己的文件系统独立视图。
  • FreeBSD jail (2000)FreeBSD引入了jail,它通过隔离进程、文件系统和网络提供了轻量级虚拟化。这是集装箱化的早期形式。
  • Solaris containers (2004)Sun Microsystems开发了Solaris containers,这是一种更高级的OS级虚拟化形式。它允许Solaris的多个实例在单个主机上运行,每个主机与其他主机隔离。
  • cgroups名称空间 (2007)Linux内核引入了cgroups (控制组) 和命名空间,为容器化奠定了基础。这些功能启用了资源隔离 (cgroups) 和进程隔离 (命名空间)。
  • LXC (Linux容器) (2008)LXC是为Linux容器创建用户友好界面的首批尝试之一。它使用cgroups和名称空间来提供进程和资源隔离。
  • Docker (2013)Docker通过使更广泛的受众可以访问容器技术,从而彻底改变了容器技术。Docker使用Dockerfiles引入了用户友好的命令行界面和标准化的容器映像。这允许开发人员以一致的方式打包应用程序及其依赖项。
  • 容器编排 (2014向前)随着微服务的兴起以及对容器高效管理和扩展的需求,容器编排工具如Kubernetes (最初由Google开发) 、Docker Swarm、Apache Mesos、或者哈西奇普的游牧民族获得了知名度。这些工具可自动执行容器化应用程序的部署、扩展和管理。
  • OCI (开放集装箱倡议) (2015)为了标准化容器格式和运行时,Docker和其他行业领导者创立了OCI。OCI规范定义容器镜像的开放容器格式 (OCF) 和容器运行时的开放容器运行时 (OCR)。
  • Containerd (2017)Docker将其容器运行时containerd捐赠给了云原生计算基金会 (CNCF)。Containerd现在已成为许多容器平台和编排工具的核心组件。
  • 替代品的崛起 (21世纪20年代)虽然Docker仍然很受欢迎,但containerd和containerd等替代容器运行时 Podman 获得了吸引力。这些工具提供了灵活性,并解决了与Docker相关的一些问题。

容器技术已经走了很长一段路,从简单的流程隔离发展为一个强大的生态系统,为现代云原生应用程序提供动力。随着容器编排,安全性和标准化工作的不断发展和改进,旅程将继续进行。

Docker: 引擎盖下有什么?

Docker是一个使用容器化技术来简化应用程序的开发,部署和扩展的平台。在引擎盖下,Docker依靠几个关键组件和技术来实现其功能。

  • Docker 引擎
    Docker Engine (通常简称为Docker) 是Docker技术的核心,它提供了创建和管理容器生命周期的必要功能。它的体系结构允许在容器中无缝开发,运输和运行应用程序。Docker引擎本质上是模块化的,由许多有助于容器生命周期管理的模块组成
    1. 容器Docker使用containerd作为其容器运行时。Containerd是一个行业标准的核心容器运行时,它提供了容器执行和管理的基本功能。它处理低级别的容器操作,如容器创建、执行和删除。
    2. runCcontainerd的核心是runC,它是行业标准的容器运行时。runC负责根据OCI (Open Container Initiative) 规范生成和运行容器。它处理容器生命周期,包括从容器映像创建和运行容器。
    3. libcontainerDocker最初使用libcontainer作为其容器执行库。但是,随着containerd的发展,libcontainer的功能被整合到containerd中。
  • Docker 客户端
    Docker客户端是一个命令行工具,允许用户与Docker守护程序 (Docker引擎) 进行交互。用户向Docker客户端发出命令,然后该客户端与Docker守护程序进行通信,以执行诸如构建,运行和管理容器之类的操作。
  • Docker 镜像
    Docker映像是轻量级、独立和可执行的包,包括应用程序及其所有依赖项。图像是根据Dockerfile中定义的一组指令构建的。它们存储在注册表中,例如Docker Hub或私有注册表,并且可以轻松共享和分发。
  • Docker 注册表
    Docker映像存储在注册表中,注册表是用于共享和分发容器映像的存储库。Docker Hub是默认的公共注册表; 用户还可以设置私人注册表以供内部使用。当需要运行容器时,可以从注册表中提取图像。
  • Docker Compose
    Docker Compose是定义和运行多容器Docker应用程序的工具。它允许用户描述服务、网络和卷 docker-compose.yml 文件,便于定义具有多个组件的复杂应用程序。
  • Docker Swarm
    Docker Swarm是Docker的原生集群和编排解决方案。它允许用户创建和管理一群Docker节点,将它们变成单个虚拟Docker主机。Swarm支持跨多个容器的服务部署和扩展。
  • 网络和存储驱动程序
    Docker提供了各种网络和存储驱动程序,这些驱动程序允许容器相互之间以及与外部网络进行通信。可以根据应用程序的特定要求配置网络和存储驱动程序。

了解这些组件可以深入了解Docker如何利用容器化来封装应用程序及其依赖关系,从而使它们可移植、可扩展且易于跨不同环境管理。

Podman: Docker的替代方案

Podman (Pod Manager) 是一个用于管理OCI (open Container Initiative) 容器和Pod的开源工具。它的体系结构和方法在几个关键方面与Docker有所不同,尤其是在没有守护程序的情况下如何运行。Podman是一个功能强大的容器管理工具,可以被认为是Docker引擎的潜在替代品。

是什么使Podman与其他容器引擎有所不同?

  • 无守护建筑与需要中央守护进程 (dockerd) 来创建、运行和管理容器的Docker不同,Podman在无守护进程架构中运行。这意味着每个命令都在其过程中运行,通过减少攻击面并允许非root用户运行容器来提高安全性。
  • 根和无根模式
    • Root模式: Podman可以以root身份运行,类似于传统的Docker。此模式可完全访问系统的所有特性和功能。
    • 无根模式: Podman的重要功能之一是它能够在没有root权限的情况下运行容器。这增强了安全性,因为它降低了特权升级攻击的风险。
  • Fork/Exec模型的使用当使用Podman启动容器时,它会分叉自己,然后执行运行时 (如runc或crun)。每个容器都是其在主机上的进程或进程集,由内核直接管理,而不是由长时间运行的守护进程管理。
  • 与Docker的兼容性Podman旨在在命令行 (CLI) 语法方面与Docker兼容,使用户可以轻松地从Docker过渡到Podman。对于大多数基本的docker命令,您通常可以将Docker别名为podman,它们的功能也将相同。
  • Pod管理与Kubernetes类似,Podman也可以管理pod,pod是共享同一网络、IPC和PID命名空间的一个或多个容器的组。此功能使Podman与Kubernetes环境很好地保持一致。
  • 图像管理Podman使用与Docker相同的图像格式,这意味着它可以从Docker可以的任何容器注册表中提取和使用图像。它还使用与Docker相同的图像/存储格式。
  • 网络Podman支持多种组网模式,包括主机组网、网桥组网和容器组网。这些模式是每个容器处理的,可以设置为模仿Docker的网络配置。
  • 安全在无守护进程和通常无根模式下运行容器固有地降低了安全风险。此外,Podman还集成了SELinux,seccomp和linux内核本地提供的其他安全功能。

总体而言,Podman的体系结构为管理容器提供了安全且用户友好的替代方案,尤其是在安全性至关重要的环境中。它的无守护和无根功能,以及与Docker的兼容性,使其成为容器化生态系统中的热门选择。

The Need for Container Orchestration

随着容器化在部署应用程序中变得越来越流行,对容器编排的需求也在增长。尽管单个容器具有许多优点,但在不同环境中管理大量容器可能很快变得复杂而麻烦。容器编排平台通过自动化容器化应用程序的部署、扩展和管理来解决这一挑战。

以下是容器编排必不可少的一些关键原因:

  1. 自动化容器管理
    手动管理大量容器容易出错且耗时。容器编排平台自动执行许多任务,包括:
    • 部署: Orchestrators可以自动将容器部署到集群中的不同节点,保证应用的可用和运行的顺畅。
    • 扩展: 协调器可以根据需求自动向上或向下扩展容器化应用程序,从而确保最佳的资源利用率。
    • 运行状况监控: 协调器可以监控容器的运行状况,如果容器失败,自动重启,确保应用正常运行时间。
    • 网络: 协调器可以为容器化应用程序配置和管理网络,确保它们可以相互通信和外部资源。
  2. 简化复杂的工作流程
    容器编排平台可以帮助简化和简化复杂的工作流,例如持续集成和持续交付 (CI/CD) 管道。这些平台可以自动化容器化应用程序的构建、测试和部署,使开发人员可以专注于编写代码和交付价值。
  3. 提高资源利用率
    容器编排平台可以通过确保容器仅在需要时才运行来帮助提高资源利用率。这可以大大节省成本,尤其是在每小时计费资源的云环境中。
  4. 加强一致性和控制
    容器编排平台可以帮助加强对容器化应用程序的一致性和控制。这对于确保以一致的方式部署应用程序以及它们满足安全性和合规性要求非常重要。
  5. 启用多云部署
    容器编排平台可以实现多云部署,其中应用程序跨多个云提供商部署。这可以提供更大的灵活性和弹性,并减少对任何单个供应商的依赖。

一些流行的容器编排平台有:

  • Kubernetes
    由于其可扩展性,灵活性和开源性质,它是最受欢迎的容器编排平台。它也被称为容器的事实上的编排平台。
  • Decker Swarm
    Docker的本机容器编排平台,可轻松使用并与Docker生态系统集成。
  • Apache Mesos
    一种分布式资源管理平台,也可用于容器编排,以其高性能和可伸缩性而闻名。
  • Nomad
    为云原生应用设计的轻量级、灵活的容器编排平台。

Kubernetes: 容器化应用程序的协调器

Kubernetes (通常缩写为k8s) 是一个开源平台,用于自动化容器化应用程序的部署,扩展和管理。它已成为容器编排的事实上的标准,为各个行业的大量应用程序提供动力。

想象一下,你有一个大型乐团,有许多不同的乐器。每种乐器都发挥着自己独特的部分,但是它们都需要和谐地共同努力才能创造出优美的音乐。Kubernetes就像这个乐团的指挥一样,协调不同的容器化应用程序 (乐器),以确保您的应用程序平稳高效地运行。

以下是kubernetes核心功能的细分:

  • Deployment: Kubernetes自动执行跨节点集群的容器化应用的部署。
  • 扩展: 它根据需求自动向上或向下扩展应用程序,确保最佳的资源利用率。
  • 负载平衡: Kubernetes在应用程序的不同实例之间平均分配流量,确保高可用性和响应能力。
  • 服务发现: 它使应用程序能够发现并相互通信,而不管它们在集群中的位置如何。
  • 运行状况监控: Kubernetes会监控应用的运行状况,如果应用失败,会自动重启。
  • 安全性: Kubernetes提供了一个强大的安全框架,用于管理访问控制和保护您的应用程序。
  • 自我修复: Kubernetes重新启动失败的容器,替换容器,杀死不响应您的用户定义的健康检查的容器,在客户准备好服务之前,不会向他们做广告。
  • 水平缩放: 使用简单的命令,使用UI或根据CPU使用情况自动向上和向下扩展应用程序。

这是对kubernetes历史的快速回顾:

  • 2014: Kubernetes源自Google的内部容器管理系统Borg。
  • 2015: Kubernetes是根据Apache许可证2.0开源的。
  • 2016: 云原生计算基金会 (CNCF) 采用Kubernetes作为毕业项目。
  • 2017: Kubernetes 1.0发布,标志着其发展的重要里程碑。
  • 2023: Kubernetes是占主导地位的容器编排平台,被全球数百万组织使用。

Kubernetes成为领先的容器编排平台有以下几个原因:

  • 开源: Kubernetes可以自由使用和修改,允许与各种工具和技术进行定制和集成。
  • 可扩展: Kubernetes可以跨多个节点管理数千个容器,适合大规模应用。
  • 灵活: Kubernetes支持广泛的容器运行时间和容器映像,为您的应用程序开发提供了灵活性。
  • 社区驱动: Kubernetes拥有庞大而活跃的开发人员和用户社区,提供了宝贵的支持和资源。
  • 协作: DevOps强调打破开发和运营团队之间的孤岛,鼓励分担责任并改善沟通。

Kubernetes的关键组件

Kubernetes是一个功能强大的容器编排平台,由几个关键组件组成,共同管理和部署容器化应用程序。


控制平面节点

Kubernetes中的控制平面节点在管理集群的状态和配置中起着至关重要的作用。他们负责对集群做出全局决策 (如调度),以及检测和响应集群事件 (如在部署的 复制品 字段不满意)。以下是控制平面节点的关键组件:

  • API服务器作为Kubernetes控制平面的前端。API服务器负责处理请求,验证请求并更新集群中的相应对象。它公开了Kubernetes API。
  • 集群数据存储-etcd它是集群中唯一有状态的部分,它将整个集群配置 (即所需状态和集群的当前状态) 保持不变。
  • 控制器管理器管理调节集群状态的控制器。控制器负责维护所需的状态并处理诸如节点管理,复制和端点之类的任务。
  • 调度程序根据资源可用性、约束和其他策略将pod分配给节点。调度程序做出决策,以确保工作负载在集群中均匀分布。

工作节点 (迷你)

Kubernetes中的工作节点是实际应用程序 (容器) 运行的机器 (物理或虚拟)。它们由控制平面管理,并执行请求的必要工作负载。每个工作节点都是Kubernetes集群的一部分,并具有协调和运行应用程序所需的组件。以下是工作节点的关键组件:

  • 库贝莱特在与控制平面节点的API服务器通信的每个节点上运行的代理。它确保容器在pod中运行,并向控制平面报告节点的状态。
  • 容器运行时负责管理节点上的整个容器生命周期。Containerd是领先的容器运行时之一。
  • 库比代理它是安装在集群中每个节点上的Kubernetes代理。它负责本地集群联网。它实现本地IPTABLES或IPVS规则来处理Pod网络上流量的路由和负载平衡。它监视服务对象及其端点发生的更改。如果发生更改,则将其转换为节点内部的实际网络规则。Kube-Proxy在安装过程中作为插件安装,通常作为DaemonSet创建。

Pod

pod是Kubernetes中最小的可部署单元,代表集群中正在运行的进程的单个实例。Pod封装一个或多个容器,共享网络和存储资源。


副本集

管理pod的生命周期,并确保pod的副本数量始终在运行。它可以根据定义的配置向上或向下扩展pod的数量。


部署

向应用程序提供声明性更新。用户定义所需状态,部署控制器更改实际状态以匹配所需状态,从而促进更新和回滚。


服务

定义一组pod和访问它们的策略。服务允许群集中不同pod集之间进行通信,从而抽象出底层网络详细信息。


存储卷

管理存储并为容器提供数据持久性。可以将卷附加到pod,从而允许数据在pod重新启动期间持续存在。


命名空间

提供了一种将集群资源划分为多个虚拟集群的方法。命名空间对于组织和隔离集群中的资源很有用。


ConfigMap和Secret

ConfigMaps和Secrets用于与应用程序代码分开管理配置数据和敏感信息 (例如密码或API密钥)。


Kubernetes仪表板

基于web的UI,用于可视化管理和监视Kubernetes集群。它提供了各种资源的图形表示,并允许用户与集群进行交互。


了解这些组件的角色和交互对于在Kubernetes集群中有效部署和管理容器化应用程序至关重要。

Kubernetes不是什么

虽然Kubernetes是管理容器化应用程序的流行且功能强大的工具,但重要的是要了解它不是什么以及它不能做什么。

  • Kubernetes不是传统的虚拟化平台
    Kubernetes在容器编排级别运行,而不是在虚拟机级别运行。它不像VMware或KVM这样的虚拟机管理程序那样提供虚拟化。相反,它管理和编排容器化应用程序。
  • Kubernetes不是集装箱化平台
    虽然Kubernetes与容器一起工作,但它本身并不是容器化平台。它依赖容器运行时 (如containerd或Docker) 来管理和运行容器。Kubernetes专注于协调和自动化容器部署,扩展和管理。
  • Kubernetes不是Docker的替代品
    Kubernetes和Docker服务于不同的目的。Docker主要是一个构建、打包和分发容器的平台,而Kubernetes是一个编排平台,可以处理包括Docker在内的各种容器运行时。
  • Kubernetes不是PaaS (平台即服务)
    与传统的平台即服务 (PaaS) 产品相比,Kubernetes提供了更精细的控制。PaaS通常抽象掉基础设施细节,而Kubernetes允许用户定义和管理他们的基础设施,使其更适合复杂多样的应用程序体系结构。
  • Kubernetes不是配置管理工具
    虽然Kubernetes允许用户为应用程序定义配置,但它不是像Ansible或Puppet这样的配置管理工具。它专注于声明应用程序的期望状态并管理其生命周期,但它不处理通用配置管理任务。
  • Kubernetes本质上并不安全
    Kubernetes提供了一个强大的框架,但它不是安全性的灵丹妙药。用户必须实施安全最佳实践,配置网络策略,并定期更新其集群。Kubernetes中的安全是平台和用户之间的共同责任。
  • Kubernetes不仅适用于微服务
    虽然Kubernetes非常适合微服务体系结构,但它并不局限于它们。Kubernetes可以管理和协调各种应用程序类型,包括单片应用程序和遵循其他架构模式的应用程序。
  • Kubernetes不是一刀切的解决方案
    对于简单或小规模的应用,Kubernetes可能会过大。较小的项目可能会从更简单的解决方案中受益。Kubernetes专为需要可扩展性、弹性和灵活性的复杂分布式系统而设计。

了解Kubernetes不是什么,有助于设定现实的期望,并指导用户根据其特定需求选择合适的工具。这是一个功能强大的编排平台,但必须考虑其功能是否与给定项目的要求一致。

开发容器技术

让我们看一下一些容器技术:

  • Containerd
    containerd虽然没有完全出现 (已经出现了几年),但值得一提。它是一个核心容器运行时,最初是Docker的一部分,但已成为一个独立的项目和各种容器平台的关键组件。
  • Podman
    它是一个开源容器管理工具,旨在提供无守护进程、无根的容器体验。它允许用户在不需要中央守护进程的情况下管理容器,使其成为Docker的轻量级替代方案。
  • Buildkit
    它是一个用于构建容器图像的工具包。起源于Moby项目 (推进软件容器化运动的开源项目),它提供了一种更加模块化和高效的构建容器映像的方式。它通常集成到容器构建系统中。
  • kata-container
    这是一个开源项目,将轻量级虚拟机 (vm) 与容器的速度和可管理性相结合。它旨在提供vm的安全优势,同时保持容器的性能优势。
  • CRI-O
    它是专门为Kubernetes设计的轻量级容器运行时。它实现了Kubernetes容器运行时接口 (CRI),可以直接从Kubernetes启动容器,而不需要像Docker这样的完整容器编排平台。
  • kubevirt
    它扩展了Kubernetes,以支持与容器工作负载一起运行和管理虚拟机。这允许组织有一个统一的平台来管理虚拟机和容器。
  • Firecracker
    由亚马逊网络服务 (AWS) 开发,Firecracker 是一种轻量级的开源虚拟化技术,专为无服务器计算而设计。通过将vm的安全性与容器的速度和效率相结合,它提供了容器和vm的好处。
  • opencontainers (OCI) 规格尽管不是一项特定的技术,但OCI在标准化容器格式和运行时方面仍然发挥着至关重要的作用。随着容器采用率的增长,遵守通用规范对于互操作性变得越来越重要。
  • Kpack
    这是一个Kubernetes-native平台,用于构建和更新容器映像。它使映像构建过程自动化,使开发人员可以更轻松地直接在Kubernetes环境中创建和管理容器映像。
  • Gvisor
    它是由Google开发的用户空间内核,为容器提供了额外的隔离层。它增强了容器的安全性和隔离性,而没有与传统虚拟化相关的性能开销。

实验室4。Docker,Podman和Kubernetes

asset-v1-LinuxFoundationX+LFS162x+1T2024+type@asset+block@Chapter_4_Lab_-_Docker__Podman_and_Kubernetes.pdf

第四章总结

本章概述了容器和Kubernetes,这是现代软件部署和编排领域中的重要工具。我们首先了解虚拟机及其容器的局限性和好处,容器是轻量级、可移植和自给自足的单元,旨在运行在任何地方。我们讨论了容器技术 (Docker是最受欢迎的示例) 如何帮助将应用程序与底层系统隔离,使它们更安全,更易于管理。然后,本章过渡到Kubernetes,这是一个开源平台,旨在自动部署,扩展和操作应用程序容器。介绍了Kubernetes的关键组件,包括控制平面和工作节点。强调了控制平面的职责,例如调度和维护群集状态,以及工作节点在运行实际应用程序中的作用。讨论了核心Kubernetes概念,例如pod,部署,服务和名称空间。这些构成了在Kubernetes上部署和管理应用程序的构建块。本章旨在为理解容器和Kubernetes在当今软件开发和部署环境中的关键作用提供基础。